# 求阶乘

# def factorical(num):
#     """
#     1. 终止条件：当num变为1时
#     2. 递归过程
#     3. 参数传递
#     :param num:
#     :return:
#     """
#     if num == 1:
#         return num
#     else:
#         return num * factorical(num-1)
#
#
# def test_factorical():
#     assert factorical(3) == 3*2*1
#     assert factorical(4) == 4*3*2*1


"""
    求和函数的定义为：sum(n) = 1 + 2 + … + n，其中n为正整数。
    根据上面的函数要求编写单元测试用例。
    使用非递归的方式实现。
    使用递归的方式实现。
    计算这段代码的时间复杂度是多少
"""


def sum(num):
    # 递归方式
    # 时间复杂度O(n)
    if num == 1:
        return num
    else:
        # 递归过程
        return num + sum(num - 1)

    # 非递归
    # sum = 0
    # for i in range(num+1):
    #     sum += i
    # return sum


def test_sum():
    assert sum(4) == 1+2+3+4
